detalhamento = new Detalhamento();

function CarregarMaterialPorCodigo( codigo )
{
	var url = "http://"+servidor+"/CarregarDados.php?informacao=carregar_material_por_codigo&codigo="+codigo;
    ajax.requestFile = url;
    ajax.onCompletion = function()
    {
       material = ProcessarXMLMaterial( ajax.responseXML );
       CriarCamposMaterial( material );
    };

    ajax.runAJAX();
}

function AppendObjeto( objeto, tipoObjeto )
{

    
}

/**
Adiciona um objeto(Material ou Servi�o) a tabela detalhamento.
@objeto - Array contendo as informa��es do objeto
@tipoObjeto - Tipo do objeto, se � Material (1) ou Servi�o (2)
*/
function AdicionarObjeto( objetoSelecionado, tipoObjeto )
{
	var qtdObjetos = document.getElementById("tabelaDetalhamento").rows.length-3; 
	
	// Se o material adicionado j� estiver no detalhamento incrementa sua quantidade em 1.
	if( tipoObjeto == 1 )
	{
		for( var i = 0; i < detalhamento.itens.length; i++ )
		{
			var a = detalhamento.itens[i].codigo;
			var b = objetoSelecionado[1];
				if( detalhamento.itens[i].codigo == objetoSelecionado[1] )
				{
					document.getElementById("quantidade"+i).value = parseInt(document.getElementById("quantidade"+i).value)+1;
					CalcularValorTotalMaterial( i, document.getElementById("quantidade"+i).value, document.getElementById('valorUnitario'+i).innerHTML);
					return 1;
				}
			}
	}
	
	if( tipoObjeto == 1 )
	{       
        var objeto = new Material( objetoSelecionado[0],
        						   objetoSelecionado[5], 
        						   objetoSelecionado[1], 
        						   escape(objetoSelecionado[2]), 
        						   escape(objetoSelecionado[4]), 
        						   objetoSelecionado[6],  
        						   objetoSelecionado[3] ); 
	}
	else if( tipoObjeto == 2 )
	{
		var objeto = new Servico( objetoSelecionado[0], 
				                  objetoSelecionado[1], 
				                  objetoSelecionado[2], 
				                  objetoSelecionado[3] );
	}
	
	detalhamento.itens.push(objeto);
         
	
         
	var linhaObjeto = document.createElement("tr");
	if( qtdObjetos%2 != 0 )
		linhaObjeto.style.backgroundColor = '#FFFFFF'; // Alterar
	var colunaExcluir = document.createElement("td");
	colunaExcluir.style.textAlign = 'center';
	var imgRemover = document.createElement("img");
	imgRemover.setAttribute("id", "material"+qtdObjetos);
	imgRemover.setAttribute("src", "templates/b_drop.png");
	imgRemover.setAttribute("onClick", "RemoverObjeto( this )");
         
	var colunaNumeracao = document.createElement("td");
	colunaNumeracao.setAttribute("id","numeracao"+qtdObjetos);
	colunaNumeracao.innerHTML = qtdObjetos+1;
	colunaNumeracao.style.textAlign = 'center';
         
	var colunaNome = document.createElement("td");
	
	if( tipoObjeto == 1 )
	{
         if( objetoSelecionado[0] == 0 )
        	 colunaNome.innerHTML = ""+objetoSelecionado[4]; // implementar descricao do objeto quando clicar
         else
        	 colunaNome.innerHTML = "<a href='javascript:void();' onclick=\"popup('ExibirInformacoesObjeto.php?objeto=material&objetoId="+objetoSelecionado[0]+"', 'Informa��es do Material', 800, 500 );\">"+objetoSelecionado[2]+"</a>"; // implementar descricao do objeto quando clicar
	}
	else if( tipoObjeto == 2 )
	{
		if( objetoSelecionado[0] == 0 )
       	 	colunaNome.innerHTML = ""+objetoSelecionado[3]; // implementar descricao do objeto quando clicar
        else
       	 	colunaNome.innerHTML = "<a href='javascript:void();' onclick=\"popup('ExibirInformacoesObjeto.php?objeto=servico&objetoId="+objetoSelecionado[0]+"', 'Informa��es do Servi�o', 800, 400 );\">"+objetoSelecionado[2]+"</a>"; // implementar descricao do objeto quando clicar
	}
	
         var colunaValorUnitario = document.createElement("td");
         colunaValorUnitario.setAttribute("id","valorUnitario"+qtdObjetos);
         
         var colunaValorTotal = document.createElement("td");
         colunaValorTotal.setAttribute("id","valorTotal"+qtdObjetos);
        	 
         var colunaQuantidade = document.createElement("td");
         
         colunaExcluir.appendChild(imgRemover);
         linhaObjeto.appendChild(colunaExcluir);
         linhaObjeto.appendChild(colunaNumeracao);
         linhaObjeto.appendChild(colunaNome);
         linhaObjeto.appendChild(colunaQuantidade);
         linhaObjeto.appendChild(colunaValorUnitario);
         linhaObjeto.appendChild(colunaValorTotal);
         document.getElementById("corpoDetalhamento").appendChild(linhaObjeto);
         
         if( tipoObjeto == 1 )
         {
        	 
        	 var inputQuantidade = document.createElement("input");
             inputQuantidade.setAttribute("id", "quantidade"+qtdObjetos);
             inputQuantidade.setAttribute("size", "2");
             inputQuantidade.setAttribute("class", "inputTexto");
             inputQuantidade.setAttribute("value", 1);
             inputQuantidade.setAttribute("onKeyUp", "CalcularValorTotalMaterial( Number(this.id.replace('quantidade','')), this.value,document.getElementById('valorUnitario'+Number(this.id.replace('quantidade',''))).innerHTML  );");
             inputQuantidade.setAttribute("onChange", "if(this.value == '')this.value=1;CalcularValorTotalMaterial( Number(this.id.replace('quantidade','')), this.value,document.getElementById('valorUnitario'+Number(this.id.replace('quantidade',''))).innerHTML  );");
             colunaQuantidade.appendChild(inputQuantidade);
             
             var valorUnitarioDesformatado = objetoSelecionado[3];
             var valorUnitarioFormatado = FormatarMoeda( parseInt(valorUnitarioDesformatado) );
             
             colunaValorUnitario.innerHTML = 'R$'+valorUnitarioFormatado;
             colunaValorUnitario.style.textAlign = 'right';
             var valorTotalDesformatado = valorUnitarioDesformatado;
             var valorTotalFormatado = FormatarMoeda( parseInt(valorTotalDesformatado) )
             colunaValorTotal.innerHTML= 'R$ '+valorTotalFormatado;
             colunaValorTotal.style.textAlign = 'right';
             AtualizarValorTotal();
             
             // Determina o tipo de detalhamento
             detalhamento.tipoDetalhamento[0] = 1;
             if( objetoSelecionado[5] != 0 )
            	 detalhamento.tipoDetalhamento[1] = objetoSelecionado[5];
         }
         else if( tipoObjeto == 2)
         {
             colunaQuantidade.innerHTML = "N/A";
             colunaValorUnitario.innerHTML = "N/A";
             colunaValorTotal.innerHTML= "N/A";
             detalhamento.tipoDetalhamento[0] = 2;
         }
         
}

function RemoverObjeto( input )
{
         var posicaoElemento = Number(input.id.replace("material",""));
         var tabelaDetalhamento = document.getElementById("tabelaDetalhamento");
         var qtdObjetos = tabelaDetalhamento.rows.length-3; // quantidade de materiais no detalhamento

         tabelaDetalhamento.deleteRow( (posicaoElemento+1) );
         detalhamento.itens.splice((posicaoElemento), 1);
         
         for( var i = posicaoElemento+1; i < qtdObjetos; i++ )
         {
              var objeto = document.getElementById("material"+i);
              objeto.setAttribute("id", "material"+(i-1));
              var numeracao = document.getElementById("numeracao"+i);
              numeracao.setAttribute("id", "numeracao"+(i-1));
              numeracao.innerHTML = i;
              var valorUnitario = document.getElementById("valorUnitario"+i);
              valorUnitario.setAttribute("id", "valorUnitario"+(i-1));
              var quantidade = document.getElementById("quantidade"+i);
              if( quantidade != null )
                  quantidade.setAttribute("id", "quantidade"+(i-1));
              var valorTotal = document.getElementById("valorTotal"+i);
              valorTotal.setAttribute("id", "valorTotal"+(i-1));
         }
         qtdObjetos = qtdObjetos - 1; // quantidade de materiais no detalhamento atualizada
         if( qtdObjetos == 0 )
        	 detalhamento.tipoDetalhamento[0] = 0;
         AtualizarValorTotal();
}



function AtualizarValorTotal()
{
         var spanTextoValorTotal = document.getElementById("valortotal");
         var tabelaDetalhamento = document.getElementById("tabelaDetalhamento");
         var qtdObjetos = tabelaDetalhamento.rows.length-3;
         var valorTotalDesformatado = 0;
         var colunaValorReferencia = document.getElementById("colunaValorReferencia");
         for(var i = 0; i < qtdObjetos; i++ )
         {
              var valorTotalMaterialFormatado = document.getElementById('valorTotal'+i).innerHTML;            	  //tabelaDetalhamento.rows[i].cells[5].innerHTML;
              if( valorTotalMaterialFormatado != 'N/A' ) // significa que o objeto desta linha � um servi�o e n�o possui valor sendo assim n�o soma nada ao valor total
              {
                  var valorTotalMaterialDesformatado = Number(DesformatarMoeda( valorTotalMaterialFormatado ));
                  valorTotalDesformatado += Number(valorTotalMaterialDesformatado)/100;
              }
         }

         var valorTotalFormatado = converterParaReal( ""+valorTotalDesformatado);
         spanTextoValorTotal.innerHTML = valorTotalFormatado;
         if( colunaValorReferencia != null )
        	 colunaValorReferencia.innerHTML = 'R$ '+valorTotalFormatado;
}

/**
Calcula o valor total do material a partir da mudan�a em sua quantidade multiplicado pelo seu valor unit�rio
Atualiza a coluna Valor Total com esta informa��o
*/
function CalcularValorTotalMaterial( posicaoElemento, quantidade, valorUnitarioFormatado )
{
	if( quantidade < 1 && quantidade != "") // se o valor for menor que 1 substituir por 1
	{
		document.getElementById("quantidade"+posicaoElemento).value = 1;
		return;
	}
	
    var valorUnitarioDesformatado = DesformatarMoeda( valorUnitarioFormatado )/100;
    var valorTotal = quantidade*valorUnitarioDesformatado;

    var valorTotalFormatado = converterParaReal( ""+valorTotal );
    document.getElementById("valorTotal"+posicaoElemento).innerHTML = 'R$'+valorTotalFormatado;
    AtualizarValorTotal( );
}

function js_array_to_php_array(a) {
    var a_php = "";
    var total = 0;
    for (var key in a)
    {
    	++ total;
    	a_php = a_php + "s:" +
    	String(key).length + ":\"" + String(key) + "\";s:" +
    	String(a[key]).length + ":\"" + String(a[key]) + "\";";
    }
    a_php = "a:" + total + ":{" + a_php + "}";
    return a_php;
}

function EnviarFormulario()
{
	var valorReferencia = DesformatarMoeda( document.getElementById("colunaValorReferencia").innerHTML );
	detalhamento.valorReferencia = valorReferencia; // valor total do processo de compra
            
	var processo = new Processo( document.getElementById("objeto").value, document.getElementById("objetivo").value, document.getElementById("garantias").value,
			document.getElementById("assistenciaTecnica").value, document.getElementById("infoRecebimento").value, document.getElementById("responsabilidadeIFAL").value,
			document.getElementById("responsabilidadeContratado").value, document.getElementById("sancoes").value, document.getElementById("pagamento").value, 
			document.getElementById("outrasInformacoes").value);
	
    if( detalhamento.tipoDetalhamento[0] == 1 ) // Se o detalhamento for composto por materiais deve-se atualizar os itens do detalhamento com suas respectivas quantidades  
    {
    	for(var i = 0; i < document.getElementById("tabelaDetalhamento").rows.length-3; i++ )
    	{
    		if( document.getElementById("quantidade"+i) != null )
        	{
    			detalhamento.itens[i].quantidade = document.getElementById("quantidade"+i).value;
        	}
    	}
    }

    var t = detalhamento.tipoDetalhamento.toSource();
    processo.detalhamento = detalhamento;
    var objetoSerializado =  processo.toSource(); // converte o objeto javascript para json   
    
    // cria um campo hidden para passar o processo via POST
    var formularioProcesso = document.getElementById("cadastrarProcesso");
    var hiddenDetalhamento = document.createElement("input");
    hiddenDetalhamento.setAttribute("type", "hidden");
    hiddenDetalhamento.setAttribute("name", "processo");
    hiddenDetalhamento.setAttribute("value", objetoSerializado );
    formularioProcesso.appendChild( hiddenDetalhamento );
}

// Classe processo

function Processo( objeto, objetivo, garantias, assistenciaTecnica, infoRecebimento, responsabilidadeIFAL, responsabilidadeContratado,
		           sancoes, pagamento, outrasInformacoes)
{
	this.objeto = objeto;
	this.objetivo = objetivo;
	this.garantias = garantias;
	this.assistenciaTecnica = assistenciaTecnica;
	this.infoRecebimento = infoRecebimento;
	this.responsabilidadeIFAL = responsabilidadeIFAL;
	this.responsabilidadeContratado = responsabilidadeContratado;
	this.sancoes = sancoes;
	this.pagamento = pagamento;
	this.outrasInformacoes = outrasInformacoes;
	this.detalhamento = null;
}

function Detalhamento(  )
{
	this.itens = new Array(); // material ou servi�o do detalhamento
	this.tipoDetalhamento = new Array( 0, 0); // primeira pos = tipo material, segunda pos = categoria
	this.valorReferencia = 0;
}

function Material( id, categoriaId, codigo, nome, descricao, medidaId, valor )
{
	this.id = id;
	this.categoriaId = categoriaId;
	this.codigo = codigo;
	this.nome = nome;
	this.descricao = descricao;
	this.medidaId = medidaId;
	this.valor = valor;
	this.quantidade = 0;
}

function Servico( id, codigo, nome, descricao )
{
	this.id = id;
	this.codigo = codigo;
	this.nome = nome;
	this.descricao = descricao;
}